//
//  status.swift
//  XCMicroBo
//
//  Created by 1 on 16/3/10.
//  Copyright © 2016年 1. All rights reserved.
//

import UIKit
import AFNetworking


class status: NSObject {

    //	微博创建时间
    var created_at: String?
    //微博id  Int 和 OC 中的 NSInteger 是一样的  在OC中 需要使用 long long
    //NSInteger 在32机型上 默认的整形数据的长度 是32位的
    // 在64机型上 默认的整形数据的长度 是64位的
    var id: Int64 = 0
    
    //微博正文
    var text: String?
    //微博来源
    var source: String?
    
    //转发微博
    var retweeted_status: status?

    
    //保存用户信息的属性
    var user : XCUser?
    
    
    var pic_urls: [[String : String]]?{
        
        didSet{
            
            guard let urlStr = pic_urls else {
                
                return
            }
            
            //实例化imageURLs变量
            imageURLs = [NSURL]()
            //遍历urlStr数组  将其中的字符串转化成URL
            for item in urlStr {
                
                let urlString = item["thumbnail_pic"]
                
                //第一“ ！” 表示从item中一定可以获取字符串
                //第二个“ ！”表示  从后端服务器获取的字符串一定可以生成对应的URL
                let url = NSURL(string: urlString!)!
                
                imageURLs?.append(url)
                
            }
        }
    }
    
    
    //图片数量
    var imageURLs: [NSURL]?
    
//    var imgurp:[NSURL]?
    
    
    init(dict:[String:AnyObject]) {
        super.init()
            setValuesForKeysWithDictionary(dict)
        
        
    }
    

    //重写setValue方法
    override func setValue(value: AnyObject?, forKey key: String) {
        
        //这里之所以要定义一个user模型  是因为statuse中的user属性  本身就是一个字典  

        //要想取到user中的数据  就需要再次字典转模型
        
        if key == "user"{
            
            guard let userData = value as? [String : AnyObject] else{
                
                return
            }
            
            user = XCUser(dict: userData)
            
            return
        }
        
        if key == "retweeted_status" {
            
            guard let retweeted = value as? [String : AnyObject] else {
                
                return
            }
            
            retweeted_status = status(dict: retweeted)
            return
        }
        
        super.setValue(value, forKey: key)
    }
    
    
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {
        
    }
    
    //MARK: 重写描述方法
    override var description: String {
        let keys = ["id","text","created_at","source"]
        let dict = self.dictionaryWithValuesForKeys(keys)
        return dict.description
    }
}

extension status{
    
    //返回当前时间以后的微博
//    var since_id : Int64?
    
    //返回当前时间以前的微博
//    var max_id : Int64?

    
    //从网络获取数据  返回模型数组
    class func loadHomeData(since_id : Int64 ,max_id : Int64 , finished:(array:[status]?)->()){
    
        guard let token = UserCount.shareAcount.access_token else {
            
            print("用户名密码错误或登录时间已过期")
            return
        }
        
        let urlString = "https://api.weibo.com/2/statuses/home_timeline.json"
        
        /*
        since_id	int64	若指定此参数，则返回ID比since_id大的微博（即比since_id时间晚的微博），默认为0。
        max_id		int64	若指定此参数，则返回ID小于或等于max_id的微博，默认为0。
        */
        
        var parameters = ["access_token" : token]
        

        //为since_id 或max_id赋值  这两个参数  只能有一个存在 
        //若同时存在则显示不出来数据
        if since_id > 0{
        
            parameters["since_id" ] = "\(since_id)"
        }
        
        if max_id > 0 {
        
            parameters["max_id"]="\(max_id)"
        }
        
        let manager = AFHTTPSessionManager()
        
        manager.GET(urlString, parameters: parameters, progress: nil, success: { (_, result) -> Void in

            guard let dict = result else {
                
                finished(array: nil)
                print("获取数据失败")
                
                
               
                
                return
            }
            
            
            
            guard let arr = dict["statuses"] as? [[String : AnyObject]] else{
                
                finished(array: nil)
                print("数组获取失败")
                return
            }
            
            //创建一个字典 用来保存数据模型
            var arrM = [status]()
            
            //字典转模型
            for dic in arr {
                
                //创建模型
                let model = status(dict: dic)
                

                arrM.append(model)
            }
            
            finished(array: arrM)
            
            }) { (_, error) -> Void in
                
                finished(array: nil)
                print(error)
        }
    }
}
